/**
 * 微信配置
 * @param {*} api 
 */
function wxConfig(url, param, cb, api) {
    var apis = api;
    if (!apis)
        apis = [
            'checkJsApi',
            'onMenuShareTimeline',
            'onMenuShareAppMessage',
            'onMenuShareQQ',
            'onMenuShareWeibo',
            'onMenuShareQZone',
            'hideMenuItems',
            'showMenuItems',
            'hideAllNonBaseMenuItem',
            'showAllNonBaseMenuItem',
            'translateVoice',
            'startRecord',
            'stopRecord',
            'onVoiceRecordEnd',
            'playVoice',
            'onVoicePlayEnd',
            'pauseVoice',
            'stopVoice',
            'uploadVoice',
            'downloadVoice',
            'chooseImage',
            'previewImage',
            'uploadImage',
            'downloadImage',
            'getNetworkType',
            'openLocation',
            'getLocation',
            'hideOptionMenu',
            'showOptionMenu',
            'closeWindow',
            'scanQRCode',
            'chooseWXPay',
            'openProductSpecificView',
            'addCard',
            'chooseCard',
            'openCard'];

    getWxSign(url, param, rs => {
        if (!rs) {
            return console.warn('获取微信签名失败！');
        }
        // alert(`sign:${rs.sign} stamp:${rs.stamp}`);
        wx.config({
            debug: false,
            appId: rs.appid,
            timestamp: rs.timestamp,
            nonceStr: rs.noncestr,
            signature: rs.sign,
            jsApiList: apis
        });

        cb && cb(rs);
    });

    wx.ready(function () {
        // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，则可以直接调用，不需要放在ready函数中。
        console.log('ready:成功');
    });

    wx.error(function (res) {
        // config信息验证失败会执行error函数，如签名过期导致验证失败，具体错误信息可以打开config的debug模式查看，也可以在返回的res参数中查看，对于SPA可以在这里更新签名。
        console.error('error:', res);
    });
}

function getWxSign(url, param, cb) {
    kget(url, param, (rs) => {
        rs = JSON.parse(rs)
        cb && cb(rs.data);
    });
}